// FlightSegmentDetail.java - 航段详细信息实体
package org.chen.common.flight;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Objects;

@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class FlightSegmentDetail {
    // 基础信息
    private Integer segmentNo;        // 航段号（1=去程, 2=返程）
    private Integer sequenceNo;       // 序列号（同一航段内的顺序）
    private String flightNo;          // 航班号
    private String airlineCode;       // 航空公司代码
    private String seatClass;         // 座位等级
    private String cabin;             // 舱位

    // 出发信息
    private String departureAirportCode;    // 出发机场代码
    private String departureCityCode;       // 出发城市代码
    private String departureTerminal;       // 出发航站楼
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime departureDateTime;       // 出发时间

    // 到达信息
    private String arrivalAirportCode;      // 到达机场代码
    private String arrivalCityCode;         // 到达城市代码
    private String arrivalTerminal;         // 到达航站楼
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime arrivalDateTime;         // 到达时间

    // 其他信息
    private Boolean isTransit;              // 是否为中转
    private Integer transportType;          // 运输类型

    // 构造方法
    public FlightSegmentDetail() {
        this.isTransit = false;
        this.transportType = 1; // 默认为航班
    }

    // 便利方法：获取路线描述
    public String getRouteDescription() {
        return String.format("%s-%s", 
                departureCityCode != null ? departureCityCode : "?", 
                arrivalCityCode != null ? arrivalCityCode : "?");
    }

    // 便利方法：获取时间范围描述
    public String getTimeRangeDescription() {
        return String.format("%s - %s", 
                departureDateTime != null ? departureDateTime : "?", 
                arrivalDateTime != null ? arrivalDateTime : "?");
    }

    @Override
    public String toString() {
        return "FlightSegmentDetail{" +
                "segmentNo=" + segmentNo +
                ", sequenceNo=" + sequenceNo +
                ", flightNo='" + flightNo + '\'' +
                ", route='" + getRouteDescription() + '\'' +
                ", time='" + getTimeRangeDescription() + '\'' +
                ", isTransit=" + isTransit +
                '}';
    }

    public void setTimesFromString(String departureDateTimeStr, String arrivalDateTimeStr) {
        // 自定义解析器
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

        // 使用 DateTimeFormatter 解析日期字符串
        this.departureDateTime = LocalDateTime.parse(Objects.requireNonNull(departureDateTimeStr), formatter);
        this.arrivalDateTime = LocalDateTime.parse(Objects.requireNonNull(arrivalDateTimeStr), formatter);
    }
}